#pragma once

/*****************************************************************************************************************
 * 类名： SerialManage
 * 作者： YuLijun
 * 日期： 2023-02-23
 * 功能： 管理所有串口打开、关闭、状态读取保存、将串口数据丢给MsgParser处理；
 *		 操作串口的窗体应该结合该类来进行，不要直接去读取串口信息；
 *		 MsgParser为单例类，可以在外部放到线程中；
 *		 所有报文的解析结果直接绑定MsgParser中的信号，和SerialManage无关。
 ******************************************************************************************************************/

#include "portmanage.h"

namespace ns_yht
{
#define SERIALMANAGE ns_yht::SerialManage::instance()

	class SerialManage : public PortManage
	{
		Q_OBJECT
	private:
		SerialManage(QObject *parent = nullptr);

	public:
		~SerialManage();

		static SerialManage *instance();

		QSerialPort *getPort(const QString &portName) const;
		QString getPortsSetting() const override;
		void setPortsSetting(const QString &portsSetting) override;
		QString getBdPort() const;

		void moveToThreadEx(QThread *thread) override;

	public slots:
		bool openPort(const QString &portName, qint32 baudRate, bool bdPort = false);
		void closePort(const QString &portName);
		void sendBDMessage(const QByteArray &msg);

	private slots:
		void onReadyRead();

	signals:
		void newSentence(QString portName, const QByteArray &sentence);
		void portStateChanged(QString portName, bool opened);

	private:
		static SerialManage *g_instance;
		QMap<QString, QSerialPort *> m_portList;
		QString m_bdPort;
	};

}